import request from '@/axios/request';

enum Api {
  GET_CONTRACTS = '/item-brand/contracts',
  GET_PICKING_IDS = '/item-brand/picking-ids',
  GET_BILL_DATA = '/item-brand/bill-data',
  GET_BRAND_MODEL = '/item-brand/brand-model',
  SUBMIT = '/item-brand/submit'
}

// 获取合同列表
export function getContracts() {
  console.log('正在获取合同列表...');
  return request.get(Api.GET_CONTRACTS)
    .then(response => {
      console.log('获取合同列表成功:', response);
      return response;
    })
    .catch(error => {
      console.error('获取合同列表失败:', error);
      throw error;
    });
}

// 获取识别码列表
export function getPickingIds(params: any) {
  console.log('正在获取识别码列表，参数:', params);
  return request.get(Api.GET_PICKING_IDS, { params })
    .then(response => {
      console.log('获取识别码列表成功:', response);
      return response;
    })
    .catch(error => {
      console.error('获取识别码列表失败:', error);
      throw error;
    });
}

// 查询签单数据
export function getBillData(params: any) {
  // 只使用picking_id参数
  console.log('正在查询签单数据，参数:', { picking_id: params.picking_id });
  return request.get(Api.GET_BILL_DATA, { 
    params: { picking_id: params.picking_id } 
  })
    .then(response => {
      console.log('查询签单数据成功:', response);
      return response;
    })
    .catch(error => {
      console.error('查询签单数据失败:', error);
      throw error;
    });
}

// 查询品牌型号
export function getBrandModel(params: any) {
  // 确保使用正确的参数名称
  console.log('正在查询品牌型号，参数:', { item: params.material_code });
  return request.get(Api.GET_BRAND_MODEL, { 
    params: { item: params.material_code } 
  })
    .then(response => {
      console.log('查询品牌型号成功:', response);
      return response;
    })
    .catch(error => {
      console.error('查询品牌型号失败:', error);
      throw error;
    });
}

// 提交签单数据
export function submitBillData(data: any) {
  console.log('正在提交签单数据，数据:', data);
  
  // 检查数据的基本有效性
  if (!data || !data.contract_no || !data.picking_id || !data.brand_models || !Array.isArray(data.brand_models) || data.brand_models.length === 0) {
    console.error('提交数据格式无效:', data);
    return Promise.resolve({
      code: 400,
      success: false,
      message: '提交数据格式无效，请确保包含合同号、识别码和品牌型号信息'
    });
  }
  
  return request.post(Api.SUBMIT, data)
    .then(response => {
      console.log('提交签单数据成功:', response);
      // 如果后端返回的不是对象格式，将其标准化
      if (typeof response !== 'object' || response === null) {
        return {
          code: 200,
          success: true,
          data: response,
          message: '提交成功'
        };
      }
      
      // 处理不含.success字段的情况
      if (!('success' in response)) {
        return {
          ...response,
          success: true,
          message: response.message || '提交成功'
        };
      }
      
      return response;
    })
    .catch(error => {
      console.error('提交签单数据失败:', error);
      // 创建友好的错误对象
      const errorObj = {
        code: error.status || 500,
        success: false,
        message: typeof error === 'object' && error !== null ? 
                 (error.message || error.msg || error.details?.detail || '提交失败，请重试') : 
                 '提交失败，请重试'
      };
      
      console.log('返回标准化错误:', errorObj);
      return errorObj; // 返回错误对象而非抛出错误，方便上层处理
    });
} 